# Maintainer: Robin Broda <robin@broda.me>
# Contributor: Christian Rebischke <chris.rebischke@archlinux.org>
# Contributor: Sergej Pupykin <pupykin.s+arch@gmail.com>
# Contributor: Jonathan Wiersma <archaur at jonw dot org>

# ALARM: Kevin Mihelich <kevin@archlinuxarm.org>
#  - removed ceph makedepend, libvirt-storage-rbd package
#  - removed qemu makedepend

pkgname=(libvirt libvirt-storage-gluster libvirt-storage-iscsi-direct)
epoch=1
pkgver=7.1.0
pkgrel=3
pkgdesc="API for controlling virtualization engines (openvz,kvm,qemu,virtualbox,xen,etc)"
arch=('x86_64')
url="https://libvirt.org/"
license=('LGPL' 'GPL3') #libvirt_parthelper links to libparted which is GPL3 only
install=libvirt.install
depends=('libpciaccess' 'yajl' 'fuse2' 'gnutls' 'parted' 'libssh' 'libxml2' 'numactl' 'polkit')
makedepends=('meson' 'libxslt' 'python-docutils' 'lvm2' 'open-iscsi' 'libiscsi' 'glusterfs'
             'bash-completion' 'rpcsvc-proto' 'dnsmasq' 'iproute2')
checkdepends=('ebtables')
optdepends=('libvirt-storage-gluster: Gluster storage backend'
            'libvirt-storage-iscsi-direct: iSCSI-direct storage backend'
            'gettext: required for libvirt-guests.service'
            'openbsd-netcat: for remote management over ssh'
            'dmidecode: DMI system info support'
            'dnsmasq: required for default NAT/DHCP for guests'
            'radvd: IPv6 RAD support'
            'ebtables: required for default NAT networking'
            'lvm2: Logical Volume Manager support'
            'open-iscsi: iSCSI support via iscsiadm')
backup=(
  'etc/conf.d/libvirtd'
  'etc/conf.d/libvirt-guests'
  'etc/conf.d/virtinterfaced'
  'etc/conf.d/virtlockd'
  'etc/conf.d/virtlogd'
  'etc/conf.d/virtlxcd'
  'etc/conf.d/virtnetworkd'
  'etc/conf.d/virtnodedevd'
  'etc/conf.d/virtnwfilterd'
  'etc/conf.d/virtproxyd'
  'etc/conf.d/virtqemud'
  'etc/conf.d/virtsecretd'
  'etc/conf.d/virtstoraged'
  'etc/conf.d/virtvboxd'
  'etc/libvirt/libvirt-admin.conf'
  'etc/libvirt/libvirt.conf'
  'etc/libvirt/libvirtd.conf'
  'etc/libvirt/lxc.conf'
  'etc/libvirt/nwfilter/allow-arp.xml'
  'etc/libvirt/nwfilter/allow-dhcp-server.xml'
  'etc/libvirt/nwfilter/allow-dhcpv6-server.xml'
  'etc/libvirt/nwfilter/allow-dhcp.xml'
  'etc/libvirt/nwfilter/allow-dhcpv6.xml'
  'etc/libvirt/nwfilter/allow-incoming-ipv4.xml'
  'etc/libvirt/nwfilter/allow-incoming-ipv6.xml'
  'etc/libvirt/nwfilter/allow-ipv6.xml'
  'etc/libvirt/nwfilter/allow-ipv4.xml'
  'etc/libvirt/nwfilter/clean-traffic-gateway.xml'
  'etc/libvirt/nwfilter/clean-traffic.xml'
  'etc/libvirt/nwfilter/no-arp-ip-spoofing.xml'
  'etc/libvirt/nwfilter/no-arp-mac-spoofing.xml'
  'etc/libvirt/nwfilter/no-arp-spoofing.xml'
  'etc/libvirt/nwfilter/no-ip-multicast.xml'
  'etc/libvirt/nwfilter/no-ipv6-multicast.xml'
  'etc/libvirt/nwfilter/no-ip-spoofing.xml'
  'etc/libvirt/nwfilter/no-ipv6-spoofing.xml'
  'etc/libvirt/nwfilter/no-mac-spoofing.xml'
  'etc/libvirt/nwfilter/no-mac-broadcast.xml'
  'etc/libvirt/nwfilter/no-other-l2-traffic.xml'
  'etc/libvirt/nwfilter/no-other-rarp-traffic.xml'
  'etc/libvirt/nwfilter/qemu-announce-self-rarp.xml'
  'etc/libvirt/nwfilter/qemu-announce-self.xml'
  'etc/libvirt/qemu.conf'
  'etc/libvirt/qemu-lockd.conf'
  'etc/libvirt/qemu/networks/default.xml'
  'etc/libvirt/virtinterfaced.conf'
  'etc/libvirt/virtlockd.conf'
  'etc/libvirt/virtlogd.conf'
  'etc/libvirt/virt-login-shell.conf'
  'etc/libvirt/virtlxcd.conf'
  'etc/libvirt/virtnetworkd.conf'
  'etc/libvirt/virtnodedevd.conf'
  'etc/libvirt/virtnwfilterd.conf'
  'etc/libvirt/virtproxyd.conf'
  'etc/libvirt/virtqemud.conf'
  'etc/libvirt/virtsecretd.conf'
  'etc/libvirt/virtstoraged.conf'
  'etc/libvirt/virtvboxd.conf'
  'etc/logrotate.d/libvirtd'
  'etc/logrotate.d/libvirtd.lxc'
  'etc/logrotate.d/libvirtd.qemu'
  'etc/sasl2/libvirt.conf'
)
source=("https://libvirt.org/sources/$pkgname-$pkgver.tar.xz"{,.asc}
        "find_programs.ini")
sha256sums=('870f180d80256411c5afc39bc5aac4f8acca04a4e0725c576ad24053dc64a06c'
            'SKIP'
            '735ac805fbf06021418f82297845babf481d5681bd939a6994fbdf36fe1661e4')
validpgpkeys=('453B65310595562855471199CA68BE8010084C9C') # Jiří Denemark <jdenemar@redhat.com>

prepare() {
  cd "$pkgname-$pkgver"

  sed -i 's|/sysconfig/|/conf.d/|g' \
    src/remote/libvirtd.service.in \
    tools/{libvirt-guests.service,libvirt-guests.sh,virt-pki-validate}.in \
    src/locking/virtlockd.service.in \
    src/logging/virtlogd.service.in
  sed -i 's|/usr/libexec/qemu-bridge-helper|/usr/lib/qemu/qemu-bridge-helper|g' \
    src/qemu/qemu.conf \
    src/qemu/test_libvirtd_qemu.aug.in

  sed -i 's/notify/simple/' src/remote/libvirtd.service.in
}

build() {
  cd "$pkgname-$pkgver"

  arch-meson build \
    --libexecdir=lib/libvirt \
    --native-file "$srcdir"/find_programs.ini \
    -Drunstatedir=/run \
    -Dqemu_group=kvm \
    -Dnetcf=disabled \
    -Dopenwsman=disabled \
    -Dapparmor=disabled \
    -Dselinux=disabled \
    -Dwireshark_dissector=disabled \
    -Ddriver_bhyve=disabled \
    -Ddriver_hyperv=disabled \
    -Ddriver_libxl=disabled \
    -Ddriver_vz=disabled \
    -Dsecdriver_apparmor=disabled \
    -Dsecdriver_selinux=disabled \
    -Dstorage_sheepdog=disabled \
    -Dstorage_vstorage=disabled \
    -Ddtrace=disabled \
    -Dnumad=disabled \
    -Dstorage_zfs=enabled \
    -Dstorage_rbd=disabled

  ninja -C build
}

check() {
  cd "$pkgname-$pkgver"

  ninja -C build test
}

package_libvirt() {
  provides=("libvirt=$pkgver" 'libvirt.so' 'libvirt-admin.so' 'libvirt-lxc.so' 'libvirt-qemu.so')
  cd "$pkgname-$pkgver"
  DESTDIR="$pkgdir" ninja -C build install

  mv "$pkgdir"/etc/{sysconfig,conf.d}
  mkdir "$pkgdir"/usr/lib/{sysusers,tmpfiles}.d
  echo "g libvirt - -" > "$pkgdir/usr/lib/sysusers.d/libvirt.conf"
  echo "z /var/lib/libvirt/qemu 0751" > "$pkgdir/usr/lib/tmpfiles.d/libvirt.conf"

  chown 0:102 "$pkgdir/usr/share/polkit-1/rules.d"
  chmod 0750 "$pkgdir/usr/share/polkit-1/rules.d"
  chmod 600 "$pkgdir"/etc/libvirt/nwfilter/*.xml \
    "$pkgdir/etc/libvirt/qemu/networks/default.xml"

  # Strip auto-generated UUID, so it will be generated per-install. (reproducible builds)
  sed -i 's|<uuid>.*</uuid>|<uuid></uuid>|' "$pkgdir"/etc/libvirt/qemu/networks/default.xml

  rm -rf \
    "$pkgdir/run" \
    "$pkgdir/var/lib/libvirt/qemu" \
    "$pkgdir/var/cache/libvirt/qemu" \
    "$pkgdir/etc/logrotate.d/libvirtd.libxl"

  rm -f "$pkgdir/etc/libvirt/qemu/networks/autostart/default.xml"

  # move split modules
  mv "$pkgdir"/usr/lib/libvirt/storage-backend/libvirt_storage_backend_gluster.so "$pkgdir/../"
  mv "$pkgdir/usr/lib/libvirt/storage-backend/libvirt_storage_backend_iscsi-direct.so" "$pkgdir/../"
  mv "$pkgdir/usr/lib/libvirt/storage-file/libvirt_storage_file_gluster.so" "$pkgdir/../"
}

package_libvirt-storage-gluster() {
  pkgdesc="Libvirt Gluster storage backend"
  depends=("libvirt=$pkgver" 'glusterfs')
  optdepends=()
  backup=()

  install -Dv -t "$pkgdir/usr/lib/libvirt/storage-backend" "$pkgdir/../libvirt_storage_backend_gluster.so"
  install -Dv -t "$pkgdir/usr/lib/libvirt/storage-file" "$pkgdir/../libvirt_storage_file_gluster.so"
}

package_libvirt-storage-iscsi-direct() {
  pkgdesc="Libvirt iSCSI-direct storage backend"
  depends=("libvirt=$pkgver" 'libiscsi')
  optdepends=()
  backup=()

  install -Dv -t "$pkgdir/usr/lib/libvirt/storage-backend" "$pkgdir/../libvirt_storage_backend_iscsi-direct.so"
}
